home *** CD-ROM | disk | FTP | other *** search
Text File | 1986-07-25 | 6.4 KB | 239 lines | [TEXT/MSBB] |
- ' Professor Mac's Random Access Utility
- ' ©MacTutor 1986
- ' By Dave Kelly
-
- OPTION BASE 1
- DEFINT a-z
- WINDOW 1,"",(2,25)-(510,335),3
- GOSUB WindowHeader
- Recordnumber=1
-
- MENU 1,0,1,"File"
- MENU 1,1,1,"Open"
- MENU 1,2,0,"Close"
- MENU 1,3,0,"Edit"
- MENU 1,4,1,"Quit"
- MENU 3,0,0,""
- MENU 4,0,0,""
- MENU 5,0,0,""
- False=0: True= NOT False
- Fileopen = False
-
- ON MENU GOSUB MenuEvent
- MENU ON
-
- WaitForEvent: GOTO WaitForEvent
-
- MenuEvent:
- MenuNumber = MENU(0)
- MenuItem = MENU(1):MENU
- ON MenuNumber GOSUB Filemenu,Editmenu,Convertmenu
- RETURN
-
- Filemenu:
- ON MenuItem GOSUB OpenFile,CloseFile,FindRecord,Quititem
- RETURN
-
- Editmenu:
- RETURN
-
- WindowHeader:
- TEXTFONT(2):TEXTSIZE(14):TEXTFACE(1)
- LOCATE 1,15:PRINT"Random Access Utility"
- TEXTSIZE(12):TEXTFACE(0)
- RETURN
-
- Quititem:
- IF Fileopen = True THEN GOSUB CloseFile
- MENU RESET
- WINDOW CLOSE 1
- END
-
- OpenFile:
- Filename$=FILES$(1)
- IF Filename$="" THEN GOSUB WindowHeader: RETURN
- LOCATE 4,1:PRINT" Enter the length of your Random Access File:"
- GOSUB WindowHeader
- EDIT FIELD 1,"128",(300,48)-(350,63),1,1
- BUTTON 1,1,"OK",(315,130)-(365,180)
- GOSUB Loop
- Recordlength=VAL(EDIT$(1))
- IF Recordlength >32767 OR Recordlength <=0 THEN GOTO OpenFile
- BUTTON CLOSE 1
- EDIT FIELD CLOSE 1:CLS
- OPEN Filename$ AS #1 LEN=Recordlength
- FIELD #1,Recordlength AS Random$
-
- Setup:
- GOSUB WindowHeader
- Fileopen=True
- MENU 1,1,0
- MENU 1,2,1
- MENU 1,3,1
- RETURN
-
- CloseFile:
- Fileopen=False
- MENU 1,1,1
- MENU 1,2,0
- MENU 1,3,0
- CLOSE #1
- IF MenuItem <>4 THEN GOSUB WindowHeader
- RETURN
-
- GetRecord:
- IF Recordnumber=0 THEN PRINT "Record # 0 does not exist":RETURN
- GET #1,Recordnumber
- R$=Random$
- RETURN
-
- StoreRecord:
- LSET Random$=R$
- PUT #1,Recordnumber
- RETURN
-
- FindRecord:
- CLS
- LOCATE 4,1:PRINT"Enter Record Number to find:"
- EDIT FIELD 1,STR$(Recordnumber),(200,48)-(250,63),1,1
- BUTTON 1,1,"OK",(315,130)-(365,180)
- GOSUB Loop
- Recordnumber=VAL(EDIT$(1))
- LOCATE 5,1
- IF Recordnumber<1 OR Recordnumber > 16777215# THEN PRINT "Number out of range":BEEP:FOR i=1 TO 100:NEXT:GOTO FindRecord
- GOSUB GetRecord
- EDIT FIELD CLOSE 1
- EditRecord:
- MENU ON
- CLS:GOSUB WindowHeader
- BUTTON CLOSE 1
- GOSUB DecodeASCII
- PRINT "Current Record is #";Recordnumber
- LOCATE 17,1:PRINT "Conversion string:"
- TEXTFONT(4)
- EDIT FIELD 3,"",(10,280)-(90,295),2,1
- EDIT FIELD 2,ASCII$,(10,130)-(485,250),1,1
- EDIT FIELD 1,R$,(10,40)-(485,125),2,1
- TEXTFONT(2)
- BUTTON 1,1,"OK",(450,255)-(500,305)
- BUTTON 2,1,"Write record after Edit",(275,22)-(450,37),3:b2=False
- MENU 3,0,1,"Convert"
- MENU 3,1,1,"CVI(string) Convert (2-bytes)" 'Convert 2-byte string
- MENU 3,2,1,"CVS(string) Convert (4-bytes)" 'Convert 4-byte string
- MENU 3,3,1,"CVD(string) Convert (8-bytes)" 'Convert 8-byte string
- MENU 3,4,1,"MKI$(integer) Convert" 'Convert integer
- MENU 3,5,1,"MKS$(single-precision) Convert" 'Convert single-precision
- MENU 3,6,1,"MKD$(double-precision) Convert" 'Convert double-precision
- i=1
- EditLoop:
- d=DIALOG(0)
- IF d=1 THEN buttonpushed=DIALOG(1):IF buttonpushed=1 THEN EditDone ELSE GOSUB Switch
- IF d=2 THEN i=DIALOG(2)
- IF d=6 AND i=1 THEN EditDone
- IF d=7 THEN i=(i MOD 2)+1:EDIT FIELD i
- GOTO EditLoop
- EditDone:
- R$=EDIT$(1)
- IF i=2 THEN ASCII$=EDIT$(2): GOSUB EncodeASCII
- IF b2 = True THEN GOSUB StoreRecord
- EDIT FIELD CLOSE 1
- EDIT FIELD CLOSE 2
- EDIT FIELD CLOSE 3
- BUTTON CLOSE 1:BUTTON CLOSE 2
- MENU 3,0,0,""
- CLS:GOSUB WindowHeader
- RETURN
-
- Convertmenu:
- x#=FRE(0)
- MENU OFF:TEXTFONT(4)
- Convert$=EDIT$(3)
- LOCATE 17,18:PRINT STRING$(35," "):LOCATE 18,18:PRINT STRING$(35," "):LOCATE 17,18
- ON MenuItem GOSUB CVIconvert,CVSconvert,CVDconvert,MKIconvert,MKSconvert,MKDconvert
- MENU ON:TEXTFONT(2)
- RETURN
-
- CVIconvert:
- IF LEN(Convert$)<>2 THEN PRINT"Can't convert";LEN(Convert$);"bytes.":RETURN
- IntNumber%=CVI(Convert$)
- PRINT "CVI(";CHR$(34);Convert$;CHR$(34);")=";IntNumber%
- RETURN
-
- CVSconvert:
- IF LEN(Convert$)<>4 THEN PRINT"Can't convert";LEN(Convert$);"bytes.":RETURN
- SingleNumber!=CVS(Convert$)
- PRINT "CVS(";CHR$(34);Convert$;CHR$(34);")=";SingleNumber!
- RETURN
-
- CVDconvert:
- IF LEN(Convert$)<>8 THEN PRINT"Can't convert";LEN(Convert$);"bytes.":RETURN
- DoubleNumber#=CVD(Convert$)
- PRINT "CVD(";Convert$;")=";DoubleNumber#
- RETURN
-
- MKIconvert:
- IF VAL(Convert$)<-32767 OR VAL(Convert$)>32767 THEN PRINT "Number too big!":RETURN
- IntNumber%=VAL(Convert$)
- NewConvert$=MKI$(IntNumber%)
- EDIT FIELD 3,NewConvert$,(10,280)-(90,295)
- PRINT "MKI$(";Convert$;")= ASCII:";
- PRINT USING " ###";ASC(MID$(NewConvert$,1,1)),ASC(MID$(NewConvert$,2,1))
- RETURN
-
- MKSconvert:
- IF VAL(Convert$)<-1.18E-38 OR VAL(Convert$)>3.3999E+38 THEN PRINT "Number too big!":RETURN
- SingleNumber!=VAL(Convert$)
- NewConvert$=MKS$(SingleNumber!)
- EDIT FIELD 3,NewConvert$,(10,280)-(90,295)
- PRINT "MKS$(";Convert$;")= ASCII:";
- PRINT USING " ###";ASC(MID$(NewConvert$,1,1)),ASC(MID$(NewConvert$,2,1));
- PRINT USING " ###";ASC(MID$(NewConvert$,3,1)),ASC(MID$(NewConvert$,4,1))
- RETURN
-
- MKDconvert:
- IF VAL(Convert$)<-2.23D-308 OR VAL(Convert$)>1.789999D+308 THEN PRINT "Number too big!":RETURN
- DoubleNumber#=VAL(Convert$)
- NewConvert$=MKD$(DoubleNumber#)
- EDIT FIELD 3,NewConvert$,(10,280)-(90,295)
- PRINT "MKD$(x)= ASCII:";
- PRINT USING " ###";ASC(MID$(NewConvert$,1,1)),ASC(MID$(NewConvert$,2,1));
- PRINT USING " ###";ASC(MID$(NewConvert$,3,1)),ASC(MID$(NewConvert$,4,1))
- LOCATE 18,33
- PRINT USING " ###";ASC(MID$(NewConvert$,5,1)),ASC(MID$(NewConvert$,6,1));
- PRINT USING " ###";ASC(MID$(NewConvert$,7,1)),ASC(MID$(NewConvert$,8,1))
- RETURN
-
- Switch:
- b2=NOT b2
- IF b2=True THEN BUTTON 2,2 ELSE BUTTON 2,1
- RETURN
-
- Loop:
- d=DIALOG(0)
- IF d=1 THEN Done
- IF d=6 THEN Done
- GOTO Loop
- Done:
- RETURN
-
- DecodeASCII:
- ASCII$=""
- FOR i=1 TO Recordlength
- ASCIInum$=STR$(ASC(MID$(R$,i,1)))+","
- IF LEN(ASCIInum$)=2 THEN ASCIInum$=ASCIInum$
- IF LEN(ASCIInum$)=3 THEN ASCIInum$=ASCIInum$
- ASCII$=ASCII$+ASCIInum$
- NEXT i
- RETURN
-
- EncodeASCII:
- R$="":commaposition=1
- FOR i=1 TO Recordlength
- commaplace=INSTR(commaposition,ASCII$,",")
- ASCIInum$=MID$(ASCII$,commaposition,commaplace-1)
- commaposition=commaplace+1
- R$=R$+CHR$(VAL(ASCIInum$))
- NEXT i
- RETURN
-
-